package com.zfl.app;

import com.zfl.mapper.UserMapper;
import com.zfl.po.User;
import com.zfl.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
 * MyBatis 主程序入口（main方法测试）
 */
public class MyBatisApp {
    public static void main(String[] args) {
        // 1. 测试「根据ID查询用户」
        testSelectUserById();

        // 2. 测试「查询所有用户」
//        testSelectAllUsers();

        // 3. 测试「新增用户」
        // testInsertUser();

        // 4. 测试「更新用户」（需先新增一个用户，替换ID）
        // testUpdateUser();



        // 5. 测试「删除用户」（需先新增一个用户，替换ID）
        // testDeleteUserById();

        //

    }

    /**
     * 测试：根据ID查询用户
     */
    private static void testSelectUserById() {
        System.out.println("===== 测试根据ID查询用户 =====");
        // try-with-resources 自动关闭SqlSession，无需手动close
        try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) {
            // 获取Mapper接口代理对象
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            // 调用查询方法（ID=1是之前插入的测试数据）
            User user = userMapper.selectUserById(1);
            if (user != null) {
                System.out.println("查询结果：" + user);
            } else {
                System.out.println("未查询到ID=1的用户");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 测试：查询所有用户
     */
    private static void testSelectAllUsers() {
        System.out.println("\n===== 测试查询所有用户 =====");
        try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList = userMapper.selectAllUsers();
            if (userList.isEmpty()) {
                System.out.println("暂无用户数据");
            } else {
                userList.forEach(user -> System.out.println("用户：" + user));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 测试：新增用户
     */
    private static void testInsertUser() {
        System.out.println("\n===== 测试新增用户 =====");
        try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            // 构建新增用户对象
            User newUser = new User();
            newUser.setUsername("王五");
            newUser.setAge(25);
            newUser.setEmail("wangwu@test.com");
            // 执行新增
            int rows = userMapper.insertUser(newUser);
            System.out.println("新增行数：" + rows);
            // 新增后自增ID会回填到对象中
            System.out.println("新增用户的ID：" + newUser.getId());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 测试：更新用户（需替换ID为实际存在的用户ID）
     */
    private static void testUpdateUser() {
        System.out.println("\n===== 测试更新用户 =====");
        try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            // 构建更新对象（ID替换为新增用户的ID，比如3）
            User updateUser = new User();
            updateUser.setId(3); // 替换为实际存在的用户ID
            updateUser.setUsername("王五_更新");
            updateUser.setAge(26);
            updateUser.setEmail("wangwu_update@test.com");
            // 执行更新
            int rows = userMapper.updateUser(updateUser);
            System.out.println("更新行数：" + rows);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 测试：删除用户（需替换ID为实际存在的用户ID）
     */
    private static void testDeleteUserById() {
        System.out.println("\n===== 测试删除用户 =====");
        try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            // 执行删除（ID替换为实际存在的用户ID，比如3）
            int rows = userMapper.deleteUserById(3);
            System.out.println("删除行数：" + rows);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
